/**
 * PagGerenciaTipos.java
 * 
 * Projeto: SGA-LEDS
 * 
 * Rodrigo Soares Maia
 * IFES - Instituto Federal do Espírito Santo - Campus Serra
 */

package controleInterno.cih;

import controleInterno.cci.CtrlInterno;
import controleAtividades.cih.TreeNode;
import controleInterno.cdp.CategoriaTipo;
import controleInterno.cdp.Colaborador;
import controleInterno.cdp.TipoAtividade;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.Executions;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zk.ui.util.GenericForwardComposer;
import org.zkoss.zul.Button;
import org.zkoss.zul.Caption;
import org.zkoss.zul.Div;
import org.zkoss.zul.Grid;
import org.zkoss.zul.Groupbox;
import org.zkoss.zul.Label;
import org.zkoss.zul.ListModel;
import org.zkoss.zul.ListModelList;
import org.zkoss.zul.Menubar;
import org.zkoss.zul.Menuitem;
import org.zkoss.zul.Row;
import org.zkoss.zul.Rows;
import org.zkoss.zul.Tree;
import org.zkoss.zul.Treeitem;
import org.zkoss.zul.Window;

public class PagGerenciaTipos extends GenericForwardComposer
{
    private Window winGerenciaTipos;
    private Menubar menu;
    private Menuitem novaCategoria;
    private Window arvores;
    private Grid gridTipos;
    private Rows linhas;
    private Button confirmar;
    
    private ArrayList<Tree> listaArvores;

    CtrlInterno ctrl = CtrlInterno.getInstance();
    
    @Override
    public void doAfterCompose(Component comp) throws Exception {
        super.doAfterCompose(comp);
        
        ctrl.setPagGerenciaTipos(this);
        
        boolean cadastro = (boolean) arg.get("cadastro");
        
        if (cadastro != true)
        {
            menu.setVisible(false);
        }
        
        List<CategoriaTipo> categorias;
        categorias = ctrl.obterCategorias();
        
        listaArvores = new ArrayList<>();
        
        Div arvoreTipos;
        Groupbox groupBox;
        Caption caption;
        
        for (CategoriaTipo ct : categorias)
        {
            groupBox = new Groupbox();
            caption = new Caption(ct.getNome());
            
            caption.setParent(groupBox);
            
            arvoreTipos = (Div) ctrl.criarArvoreTipos(ct, cadastro);
            
            //adicionando arvore numa lista de arvores
            listaArvores.add((Tree) arvoreTipos.getChildren().get(2).getChildren().get(1));
            
            arvoreTipos.setParent(groupBox);
            
            groupBox.setParent(arvores);
        }
        
        if (cadastro == true)
        {
            confirmar.setVisible(false);
        }
        else
        {
            winGerenciaTipos.setTitle("Selecionar Tipos");
        }
    }
    
    public void onClick$novaCategoria(Event event)
    {
        ctrl.abrirIncluirCategoria();
    }
    
    public void onClick$confirmar(Event event)
    {
        ArrayList<TipoAtividade> listaTipos = new ArrayList<>();
        
        for (Tree tree : listaArvores)
        {
            System.out.println("Selecionados: " + tree.getSelectedItems().size());
            
            for (Treeitem ti : tree.getSelectedItems())
            {
                TreeNode node = (TreeNode) ti.getValue();
                
                System.out.println("Tipo: " + (TipoAtividade) node.getData());
                
                listaTipos.add((TipoAtividade) node.getData());
            }         
        }
        
        //jogando lista de tipos para a session //TODO eh a melhor opcao jogar para a session??
        Executions.getCurrent().getSession().setAttribute("listaTipos", listaTipos);
    }
    
    public void onClick$voltar(Event event)
    {
        winGerenciaTipos.onClose();
    }
    
    public void addCategoria(CategoriaTipo ct) {
        Div arvoreTipos;
        Groupbox groupBox;
        Caption caption;
        
        groupBox = new Groupbox();
        caption = new Caption(ct.getNome());

        caption.setParent(groupBox);

        arvoreTipos = (Div) ctrl.criarArvoreTipos(ct, true);

        arvoreTipos.setParent(groupBox);

        groupBox.setParent(arvores);
    }
}
